<script setup>
	/**
	 * 登录页面脚本部分
	 */
	import {
		ref
	} from 'vue'
	import {
		onLoad
	} from '@dcloudio/uni-app'

	// 定义响应式表单数据
	const form = ref({
		username: '', // 用户名输入
		password: '' // 密码输入
	})

	// 密码显示/隐藏图标配置

	// 加载状态，用于防止重复提交
	const loading = ref(false)

	// 注册页跳转
	const toRegister = () => {
		uni.navigateTo({
			url: '/pages/register/register'
		})
	}

	/**
	 * 验证手机号格式
	 */
	const validatePhone = (phone) => {
		const reg = /^1[3-9]\d{9}$/
		return reg.test(phone)
	}

	/**
	 * 验证密码强度
	 */
	const validatePassword = (password) => {
		// 至少8个字符，包含大小写字母和数字
		const reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/
		return reg.test(password)
	}

	/**
	 * 处理登录逻辑
	 */
	const handleLogin = async () => {
		// 验证手机号
		if (!form.value.username.trim()) {
			uni.showToast({
				title: '请输入手机号',
				icon: 'none'
			})
			return
		}

		if (!validatePhone(form.value.username)) {
			uni.showToast({
				title: '请输入正确的11位手机号',
				icon: 'none'
			})
			return
		}

		// 验证密码
		if (!form.value.password.trim()) {
			uni.showToast({
				title: '请输入密码',
				icon: 'none'
			})
			return
		}

		if (!validatePassword(form.value.password)) {
			uni.showToast({
				title: '密码需至少8位，包含大小写字母和数字',
				icon: 'none',
				duration: 3000
			})
			return
		}

		loading.value = true

		try {
			const res = await uni.request({
				url: 'http://localhost:8080/api/user/login',
				method: 'POST',
				data: {
					username: form.value.username,
					password: form.value.password,
				},
				header: {
					'Content-Type': 'application/json'
				},
			})

			// 检查返回的数据结构
			console.log(res)

			// res 是一个数组，则取 res[1]
			const response = Array.isArray(res) ? res[1] : res

			if (response.statusCode === 200) {
				const data = response.data
				if (data.code === 200) {
					uni.setStorageSync('token', data.data.token)
					uni.setStorageSync('userInfo', data.data.user)
					// 通知mycontent.vue更新用户信息
					uni.$emit('userLoggedIn', data.data.user)

					uni.showToast({
						title: '登录成功',
						icon: 'success'
					})

					setTimeout(() => {
						uni.switchTab({
							url: '/pages/index/index'
						})
					}, 1500)
				} else {
					uni.showToast({
						title: data.msg || '登录失败',
						icon: 'none'
					})
				}
			} else {
				uni.showToast({
					title: `请求失败，状态码: ${response.statusCode}`,
					icon: 'none'
				})
			}
		} catch (error) {
			console.error('登录错误:', error)
			uni.showToast({
				title: '网络错误，请检查连接',
				icon: 'none'
			})
		} finally {
			loading.value = false
		}
	}
</script>

<template>
	<view class="login-page">
		<!-- 轮播图部分 -->
		<view class="login-page__swiper">
			<swiper circular="true" :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000">
				<swiper-item>
					<image src="../../static/images/swiper1.jpg" mode="aspectFill"></image>
				</swiper-item>
				<swiper-item>
					<image src="../../static/images/swiper2.jpg" mode="aspectFill"></image>
				</swiper-item>
			</swiper>
		</view>

		<!-- 登录表单部分 -->
		<view class="login-page__form">
			<!-- 用户名输入 -->
			<view class="login-page__form-item">
				<text class="login-page__form-label">手机号</text>
				<u-input class="login-page__form-input" v-model="form.username" type="number" placeholder="请输入11位手机号"
					maxlength="11" height="50" />
			</view>

			<!-- 密码输入 -->
			<view class="login-page__form-item">
				<text class="login-page__form-label">密码</text>
				<u-input class="login-page__form-input" v-model="form.password" type="password" :password-icon="true"
					placeholder="密码需8位以上含大小写字母和数字" trim height="50" />
			</view>
		</view>

		<!-- 底部操作区域 -->
		<view class="login-page__footer">
			<!-- 登录按钮 -->
			<view class="login-page__footer-btn" @click="handleLogin"
				:class="{ 'login-page__footer-btn--loading': loading }">
				{{ loading ? '登录中...' : '登录' }}
			</view>

			<!-- 注册跳转链接 -->
			<view class="login-page__footer-register">
				还没有账号？<text @click="toRegister">立即注册</text>
			</view>
		</view>
	</view>
</template>

<style scoped lang="scss">
	/* 页面基础样式 */
	.login-page {
		width: 100%;
		min-height: 100vh;
		background-color: #f8f8f8;
		padding-bottom: 40rpx;

		/* 轮播图样式 */
		&__swiper {
			width: 100%;

			swiper {
				width: 100%;
				height: 440rpx;

				image {
					width: 100%;
					height: 100%;
				}
			}
		}

		/* 表单样式 */
		&__form {
			width: 100%;
			padding: 0 40rpx;
			box-sizing: border-box;
			margin-top: 60rpx;

			&-item {
				position: relative;
				display: flex;
				align-items: center;
				margin-top: 50rpx;
				padding-bottom: 20rpx;

				/* 下划线效果 */
				&::after {
					content: '';
					position: absolute;
					left: 0;
					right: 0;
					bottom: 0;
					height: 1rpx;
					background-color: #eee;
				}
			}

			&-label {
				width: 120rpx;
				font-size: 32rpx;
				font-weight: 500;
				color: #333;
				margin-right: 20rpx;
				flex-shrink: 0;
			}

			&-input {
				flex: 1;
				width: 0;

				/* 深度选择器修改u-input内部样式 */
				:deep(.u-input__content__field-wrapper__field) {
					width: 100% !important;
					font-size: 32rpx;
				}
			}
		}

		/* 底部区域样式 */
		&__footer {
			width: 100%;
			padding: 0 40rpx;
			box-sizing: border-box;
			margin-top: 80rpx;

			/* 登录按钮样式 */
			&-btn {
				width: 100%;
				height: 90rpx;
				line-height: 90rpx;
				text-align: center;
				font-size: 34rpx;
				font-weight: 500;
				color: #fff;
				background-color: #ff6a6c;
				border-radius: 45rpx;
				box-shadow: 0 4rpx 12rpx rgba(255, 106, 108, 0.3);

				/* 加载状态样式 */
				&--loading {
					opacity: 0.7;
					pointer-events: none;
				}
			}

			/* 注册链接样式 */
			&-register {
				margin-top: 40rpx;
				text-align: center;
				font-size: 28rpx;
				color: #999;

				text {
					color: #ff6a6c;
					margin-left: 10rpx;
				}
			}
		}
	}
</style>